package cn.biplam.common.bean.tree;

import java.util.ArrayList;

import cn.biplam.common.bean.Bean;
import cn.biplam.common.client.DbResource;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.KvMap;

/**
 *  父子关系树扩展操作
 * @author XiaoRuxing Dec 15, 20097:27:40 PM
 * @version 1.0
 */
public abstract class TreeParentTableExt extends Bean{

	/**
	 *  获取下级节点列表<BR>可用于sql in子句的列表('a','b')
	 * @param startId 起始节点ID
	 * @param dbResource 数据源(可以为空,如果为空连接到默认数据源)
	 * @param filterValues 字符类型过滤条件 (Key:字段名;Value:字段值)
	 * @return 返回下级节点的列表(逗号分隔)<BR>
	 * @throws ErrorMessage
	 */
	public abstract  String getChildrenList(String startId,
			KvMap<String, String> filterValues) throws ErrorMessage;
	
	/**
	 *  获取下级节点列表<BR>
	 * @param startId 起始节点ID
	 * @param dbResource 数据源(可以为空,如果为空连接到默认数据源)
	 * @param filterValues 字符类型过滤条件 (Key:字段名;Value:字段值)
	 * @return  返回下级节点的列表
	 */
	public abstract ArrayList<String> getChilds(String startId,
			KvMap<String, String> filterValues) throws ErrorMessage;
	
	/**
	 * 新建实例
	 * @param dbResource	数据源(指定查询请求的数据源)
	 * @param tableName		表名称
	 * @param keyField		主键字段名称
	 * @param parentField	上级字段名称
	 * @return 实例
	 */
	public static TreeParentTableExt getNewInstance(DbResource dbResource,String tableName,String keyField,String parentField) throws ErrorMessage{
		if(dbResource == null)dbResource = new DbResource();
		return (TreeParentTableExt)get(TreeParentTableExt.class.getSimpleName(), dbResource,tableName,keyField,parentField);
	}
}
